/*
 * Copyright 2018-9-30 20:11:43 The JA-SIG Collaborative. All rights reserved.
 * distributed with thi file and available online at
 */
package com.lap.scp.erp.domain;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.springframework.format.annotation.DateTimeFormat;

import com.lap.scd.commons.domain.IntegerDO;

/**
 * <pre>
 *  合同信息，其中一些通用字段在ModelDO和BaseDO里面，该对象基本上只用于数据保存使用。
 *   对应的表名：contract
 *
 *	如果说界面业务复杂，有特别需要，需要在额外定义Bean对象来接收界面数据。
 * </pre>
 * 
 * @author 劳水生 Exp
 * @Date 2018-9-30 20:11:43
 * @since 2.0.0
 */
public class ContractDO extends IntegerDO {
	private static final long serialVersionUID = -8072419995505662970L;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	sign_date
	 * 备注:
	 *  合同日期，格式：yyyy-MM-dd;字段的长度:,可否为空:是。
	 * </pre>
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date signDate;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	begin_date
	 * 备注:
	 *  合同生效日期，格式：yyyy-MM-dd;字段的长度:,可否为空:否。
	 * </pre>
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date beginDate;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	end_date
	 * 备注:
	 *  合同结束日期，格式：yyyy-MM-dd;字段的长度:,可否为空:否。
	 * </pre>
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date endDate;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	customer_name
	 * 备注:
	 *  客户姓名，如：张三;字段的长度:32,可否为空:否。
	 * </pre>
	 */
	private String customerName;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	customer_id
	 * 备注:
	 *  客户所在公司，关联客户信息ID。
	 * </pre>
	 */
	private Integer customerId;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	customer_tel
	 * 备注:
	 *  客户联系电话，如:13800138000;字段的长度:64,可否为空:否。
	 * </pre>
	 */
	private String customerTel;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	owner
	 * 备注:
	 *  业主联系电话;字段的长度:64,可否为空:否。
	 * </pre>
	 */
	private String owner;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	project_name
	 * 备注:
	 *  项目名称;字段的长度:128,可否为空:是。
	 * </pre>
	 */
	private String projectName;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	project_address
	 * 备注:
	 *  项目地址;字段的长度:512,可否为空:否。
	 * </pre>
	 */
	private String projectAddress;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	total_amount
	 * 备注:
	 *  合同总金额，单位:分;字段的长度:11,可否为空:是。
	 * </pre>
	 */
	private Integer totalAmount = 0;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	confirm_amount
	 * 备注:
	 *  已确认金额，单位:分;字段的长度:11,可否为空:是。
	 * </pre>
	 */
	private Integer confirmAmount = 0;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	content
	 * 备注:
	 *  合同内容;字段的长度:1024,可否为空:是。
	 * </pre>
	 */
	private String content;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	person_liable
	 * 备注:
	 *  项目负责人;字段的长度:64,可否为空:是。
	 * </pre>
	 */
	private String personLiable;
	/**
	 * <pre>
	 * 数据库字段:
	 * 	status
	 * 备注:
	 *  项目当前进度，13个状态;字段的长度:11,可否为空:是。
	 * </pre>
	 */
	private Integer status = 0;

	// 关系
	/**
	 * 客户信息
	 */
	private CustomerDO customerDO;
	/**
	 * 支付信息
	 */
	private List<PaymentDO> paymentList;
	/**
	 * 收款信息
	 */
	private List<ReceivablesDO> receivableList;
	/**
	 * 合同金额页面接收字段
	 */
	private Double pageTotalAmount;

	/**
	 * @return 合同日期，格式：yyyy-MM-dd
	 */
	public void setSignDate(Date signDate) {
		this.signDate = signDate;
	}

	/**
	 * 合同日期，格式：yyyy-MM-dd
	 * 
	 * @param signDate
	 */
	public Date getSignDate() {
		return signDate;
	}

	/**
	 * @return 施工开始日期，格式：yyyy-MM-dd
	 */
	public void setBeginDate(Date beginDate) {
		this.beginDate = beginDate;
	}

	/**
	 * 施工开始日期，格式：yyyy-MM-dd
	 * 
	 * @param beginDate
	 */
	public Date getBeginDate() {
		return beginDate;
	}

	/**
	 * @return 完工日期，格式：yyyy-MM-dd
	 */
	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

	/**
	 * 完工日期，格式：yyyy-MM-dd
	 * 
	 * @param endDate
	 */
	public Date getEndDate() {
		return endDate;
	}

	/**
	 * @return 客户姓名，如：张三
	 */
	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}

	/**
	 * 客户姓名，如：张三
	 * 
	 * @param customerName
	 */
	public String getCustomerName() {
		return customerName;
	}

	/**
	 * 获取客户ID
	 * 
	 * @return
	 */
	public Integer getCustomerId() {
		return customerId;
	}

	/**
	 * 赋值客户ID
	 * 
	 * @param customerId
	 */
	public void setCustomerId(Integer customerId) {
		this.customerId = customerId;
	}

	/**
	 * @return 客户联系电话，如:13800138000
	 */
	public void setCustomerTel(String customerTel) {
		this.customerTel = customerTel;
	}

	/**
	 * 客户联系电话，如:13800138000
	 * 
	 * @param customerTel
	 */
	public String getCustomerTel() {
		return customerTel;
	}

	/**
	 * @return 业主联系电话
	 */
	public void setOwner(String owner) {
		this.owner = owner;
	}

	/**
	 * 业主联系电话
	 * 
	 * @param owner
	 */
	public String getOwner() {
		return owner;
	}

	/**
	 * @return 项目名称
	 */
	public void setProjectName(String projectName) {
		this.projectName = projectName;
	}

	/**
	 * 项目名称
	 * 
	 * @param projectName
	 */
	public String getProjectName() {
		return projectName;
	}

	/**
	 * @return 项目地址
	 */
	public void setProjectAddress(String projectAddress) {
		this.projectAddress = projectAddress;
	}

	/**
	 * 项目地址
	 * 
	 * @param projectAddress
	 */
	public String getProjectAddress() {
		return projectAddress;
	}

	/**
	 * @return 合同总金额，单位:元
	 */
	public void setTotalAmount(Integer totalAmount) {
		this.totalAmount = totalAmount;
	}

	/**
	 * 合同总金额，单位:元
	 * 
	 * @param totalAmount
	 */
	public Integer getTotalAmount() {
		return totalAmount;
	}

	/**
	 * 获取已收金额
	 * 
	 * @return
	 */
	public Integer getConfirmAmount() {
		return confirmAmount;
	}

	/**
	 * 赋值已收金额
	 * 
	 * @param confirmAmount
	 */
	public void setConfirmAmount(Integer confirmAmount) {
		this.confirmAmount = confirmAmount;
	}

	/**
	 * @return 合同内容
	 */
	public String getContent() {
		return content;
	}

	/**
	 * 合同内容
	 * 
	 * @param content
	 */
	public void setContent(String content) {
		this.content = content;
	}

	/**
	 * @return 项目负责人
	 */
	public void setPersonLiable(String personLiable) {
		this.personLiable = personLiable;
	}

	/**
	 * 项目负责人
	 * 
	 * @param personLiable
	 */
	public String getPersonLiable() {
		return personLiable;
	}

	/**
	 * @return 项目当前进度，13个状态
	 */
	public void setStatus(Integer status) {
		this.status = status;
	}

	/**
	 * 项目当前进度，13个状态
	 * 
	 * @param status
	 */
	public Integer getStatus() {
		return status;
	}

	/**
	 * 客户信息
	 * 
	 * @return
	 */
	public CustomerDO getCustomerDO() {
		return customerDO;
	}

	/**
	 * 客户信息
	 * 
	 * @param customerDO
	 */
	public void setCustomerDO(CustomerDO customerDO) {
		this.customerDO = customerDO;
	}

	/**
	 * @return 支付信息集合
	 */
	public List<PaymentDO> getPaymentList() {
		return paymentList;
	}

	/**
	 * 支付信息集合
	 * 
	 * @param paymentList
	 */
	public void setPaymentList(List<PaymentDO> paymentList) {
		this.paymentList = paymentList;
	}

	/**
	 * 获取收款信息
	 * 
	 * @return
	 */
	public List<ReceivablesDO> getReceivableList() {
		return receivableList;
	}

	/**
	 * 赋值收款信息
	 * 
	 * @param receivableList
	 */
	public void setReceivableList(List<ReceivablesDO> receivableList) {
		this.receivableList = receivableList;
	}

	/**
	 * @return 页面合同金额
	 */
	public Double getPageTotalAmount() {
		if (totalAmount != null) {
			pageTotalAmount = totalAmount / 100.0;
		}
		return pageTotalAmount;
	}

	/**
	 * 页面合同金额
	 * 
	 * @param pageTotalAmount
	 */
	public void setPageTotalAmount(Double pageTotalAmount) {
		if (pageTotalAmount != null) {
			totalAmount = (int) Math.rint(pageTotalAmount * 100.0);
		}
		this.pageTotalAmount = pageTotalAmount;
	}

	@Override
	public String toString() {
		return ReflectionToStringBuilder.toString(this);
	}

}
